home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / andy.lha / PLAYERSHOOT.s < prev    next >
Text File  |  1995-09-14  |  15KB  |  1,007 lines

  1.  
  2. PLR1_clicked: dc.b 0
  3. PLR2_clicked: dc.b 0
  4. popping: ds.l 5*4
  5. targdist: dc.w 0
  6. targetydiff: dc.l 0
  7. PLR1_TimeToShoot: dc.w 0
  8. PLR2_TimeToShoot: dc.w 0
  9.  
  10. MaxFrame: dc.w 0
  11.  
  12. Player1Shot:
  13.  
  14.  tst.w PLR1_TimeToShoot
  15.  beq.s okcanfire
  16.  
  17.  move.w TempFrames,d0
  18.  sub.w d0,PLR1_TimeToShoot
  19.  bge PLR1_nofire
  20.  move.w #0,PLR1_TimeToShoot
  21.  bra PLR1_nofire
  22.  
  23. okcanfire:
  24.  
  25.  lea PLR1_GunData,a6
  26.  moveq #0,d0
  27.  move.b p1_gunselected,d0
  28.  move.b d0,tempgun
  29.  
  30.  move.l #GunAnims,a0
  31.  move.b 7(a0,d0.w*8),MaxFrame
  32.  
  33.  lsl.w #2,d0
  34.  lea (a6,d0.w*8),a6
  35.  move.w 14(a6),BulletSpd
  36.  
  37.  tst.w 12(a6)
  38.  beq.s .itsaclick
  39.  
  40.  tst.b p1_fire
  41.  beq PLR1_nofire
  42.  bra .itsahold
  43.  
  44. .itsaclick:
  45.  tst.b p1_clicked
  46.  beq PLR1_nofire
  47.  
  48. .itsahold:
  49.  
  50.  move.w PLR1_angpos,d0
  51.  move.l #SineTable,a0
  52.  lea (a0,d0.w),a0
  53.  move.w (a0),tempxdir 
  54.  move.w 2048(a0),tempzdir
  55.  move.w PLR1_xoff,tempxoff
  56.  move.w PLR1_zoff,tempzoff
  57.  move.l PLR1_yoff,tempyoff
  58.  add.l #20*128,tempyoff
  59.  move.b PLR1_StoodInTop,tempStoodInTop
  60.  move.l PLR1_Roompt,tempRoompt
  61.  move.l #%1111111111110111000001,d7
  62.  move.w #-1,d0
  63.  move.l #0,targetydiff
  64.  move.l #$7fff,d1
  65.  
  66.  move.l ZoneAdds,a3
  67.  
  68.  move.l #PLR1_ObsInLine,a1
  69.  move.l ObjectData,a0
  70.  move.l #PLR1_ObjDists,a2
  71. findclosestinline
  72.  tst.w (a0)
  73.  blt outofline
  74.  tst.b (a1)+
  75.  beq.s notlinedup
  76.  btst #0,17(a0)
  77.  beq.s notlinedup
  78.  tst.w 12(a0)
  79.  blt.s notlinedup
  80.  move.b 16(a0),d6
  81.  btst d6,d7
  82.  beq.s notlinedup
  83.  tst.b numlives(a0)
  84.  beq.s notlinedup
  85.  move.w (a0),d5
  86.  move.w (a2,d5.w*2),d6
  87.  move.w 4(a0),d2
  88.  ext.l d2
  89.  asl.l #7,d2
  90.  sub.l PLR1_yoff,d2
  91.  move.l d2,d3
  92.  bge.s .oknotneg
  93.  neg.l d2
  94. .oknotneg:
  95.  divs #44,d2
  96.  cmp.w d6,d2
  97.  bgt.s notlinedup
  98.  
  99.  cmp.w d6,d1
  100.  blt.s notlinedup
  101.  move.w d6,d1
  102.  move.l a0,a5
  103.  
  104. ; We have a closer enemy lined up.
  105.  move.l d3,targetydiff 
  106.  move.w d5,d0
  107.  
  108. notlinedup:
  109.  add.w #64,a0
  110.  bra findclosestinline
  111.  
  112. outofline:
  113.  
  114.  
  115.  move.w d1,targdist
  116.  
  117.  move.l targetydiff,d5
  118.  sub.l PLR1_height,d5
  119.  add.l #18*256,d5
  120.  move.w d1,closedist
  121.  
  122.  move.w BulletSpd,d2
  123.  asr.w d2,d1
  124.  tst.w d1
  125.  bgt.s okdistthing
  126.  moveq #1,d1
  127. okdistthing
  128.  divs d1,d5
  129.  move.w d5,bulyspd
  130.  
  131.  move.w (a6),d2
  132.  moveq #0,d1
  133.  move.b 2(a6),d1
  134.  cmp.w d1,d2
  135.  bge.s .okcanshoot
  136.  
  137.  move.l PLR1_Obj,a2
  138.  move.w (a2),d0
  139.  move.l #ObjRotated,a2
  140.  move.l (a2,d0.w*8),Noisex
  141.  move.w #300,Noisevol
  142.  move.b #12,Samplenum+1
  143.  clr.b notifplaying
  144.  move.b #$fb,IDNUM
  145.  jsr MakeSomeNoise
  146.  
  147.  rts
  148.  
  149. .okcanshoot:
  150.  
  151.  move.w 8(a6),PLR1_TimeToShoot
  152.  
  153.  move.b MaxFrame,PLR1_GunFrame
  154.  sub.w d1,d2
  155.  move.w d2,(a6)
  156.  
  157.  move.l PLR1_Obj,a2
  158.  move.w (a2),d2
  159.  move.l #ObjRotated,a2
  160.  move.l (a2,d2.w*8),Noisex
  161.  move.w #300,Noisevol
  162.  move.b 3(a6),Samplenum+1
  163.  move.b #2,chanpick
  164.  clr.b notifplaying
  165.  movem.l d0/a0/d5/d6/d7/a6/a5,-(a7)
  166.  move.b #$fb,IDNUM
  167.  jsr MakeSomeNoise
  168.  movem.l (a7)+,d0/a0/d5/d6/d7/a6/a5
  169.  
  170.  tst.w d0
  171.  blt nothingtoshoot
  172.  
  173.  tst.b 5(a6)
  174.  beq PLR1FIREBULLET
  175.  
  176. ; instant effect: check for hitting:
  177.  
  178.  move.w 22(a6),d7
  179.  
  180. FIREBULLETS:
  181.  
  182.  movem.l a0/a1/d7/d0/a5,-(a7)
  183.  jsr GetRand
  184.  
  185.  move.l ObjectPoints,a1
  186.  move.w (a5),d1
  187.  lea (a1,d1.w*8),a1
  188.  
  189.  and.w #$7fff,d0
  190.  move.w (a1),d1
  191.  sub.w PLR1_xoff,d1
  192.  muls d1,d1
  193.  move.w 4(a1),d2
  194.  sub.w PLR1_zoff,d2
  195.  muls d2,d2
  196.  add.l d2,d1
  197.  asr.l #6,d1
  198.  ext.l d0
  199.  asl.l #1,d0
  200.  cmp.l d1,d0
  201.  bgt.s .hitplr
  202.  
  203.  movem.l (a7)+,a0/a1/d7/d0/a5
  204.  move.l d0,-(a7)
  205.  bsr PLR1MISSINSTANT
  206.  move.l (a7)+,d0
  207.  
  208.  bra.s .missplr
  209. .hitplr: 
  210.  
  211.  movem.l (a7)+,a0/a1/d7/d0/a5
  212.  move.l d0,-(a7)
  213.  bsr PLR1HITINSTANT
  214.  move.l (a7)+,d0
  215.  
  216. .missplr:
  217.  
  218.  subq #1,d7
  219.  bgt.s FIREBULLETS
  220.  
  221.  rts
  222.  
  223. nothingtoshoot:
  224.  move.w #0,bulyspd
  225.  tst.b 5(a6)
  226.  beq PLR1FIREBULLET
  227.  
  228.  move.w #0,bulyspd
  229.  
  230.  move.w PLR1_xoff,oldx
  231.  move.w PLR1_zoff,oldz
  232.  move.w PLR1_sinval,d0
  233.  asr.w #7,d0
  234.  add.w oldx,d0
  235.  move.w d0,newx
  236.  move.w PLR1_cosval,d0
  237.  asr.w #7,d0
  238.  add.w oldz,d0
  239.  move.w d0,newz
  240.  move.l PLR1_yoff,d0
  241.  add.l #20*128,d0
  242.  move.l d0,oldy
  243.  
  244.  move.l d0,d1
  245.  jsr GetRand
  246.  and.w #$fff,d0
  247.  sub.w #$800,d0
  248.  ext.l d0
  249.  add.l d0,d1
  250.  
  251.  move.l oldy,TESTY
  252.  
  253.  move.l d1,newy
  254.  move.l newy,TESTY+4
  255.  
  256.  st exitfirst
  257.  clr.b wallbounce
  258.  move.w #0,extlen
  259.  move.b #$ff,awayfromwall
  260.  move.w #%0000010000000000,wallflags
  261.  move.l #0,StepUpVal
  262.  move.l #$1000000,StepDownVal
  263.  move.l #0,thingheight
  264.  move.l PLR1_Roompt,objroom
  265.  movem.l d0-d7/a0-a6,-(a7)
  266.  
  267. .again:
  268.  jsr MoveObject
  269.  tst.b hitwall
  270.  bne.s .nofurther
  271.  move.w newx,d0
  272.  sub.w oldx,d0
  273.  add.w d0,oldx
  274.  add.w d0,newx
  275.  move.w newz,d0
  276.  sub.w oldz,d0
  277.  add.w d0,oldz
  278.  add.w d0,newz
  279.  move.l newy,d0
  280.  sub.l oldy,d0
  281.  add.l d0,oldy
  282.  add.l d0,newy
  283.  bra .again
  284.  
  285. .nofurther:
  286.  
  287.  movem.l (a7)+,d0-d7/a0-a6
  288.  
  289.  move.l PlayerShotData,a0
  290.  move.w #19,d1
  291. .findonefree2
  292.  move.w 12(a0),d2
  293.  blt.s .foundonefree2
  294.  adda.w #64,a0
  295.  dbra d1,.findonefree2
  296.  
  297.  rts
  298.  
  299. .foundonefree2:
  300.  
  301.  move.l ObjectPoints,a1
  302.  move.w (a0),d2
  303.  move.w newx,(a1,d2.w*8)
  304.  move.w newz,4(a1,d2.w*8)
  305.  move.b #1,shotstatus(a0)
  306.  move.w #0,shotgrav(a0)
  307.  move.b p1_gunselected,shotsize(a0)
  308.  move.b #0,shotanim(a0)
  309.  
  310.  move.l objroom,a1
  311.  move.w (a1),12(a0)
  312.  st worry(a0)
  313.  move.l wallhitheight,d0
  314.  move.l newy,TESTY+8
  315.  move.l d0,TESTY+12
  316.  move.l d0,accypos(a0)
  317.  asr.l #7,d0
  318.  move.w d0,4(a0)
  319.  
  320.  rts
  321.  
  322. PLR1_nofire:
  323.  
  324.  rts
  325.  
  326. TESTY: dc.l 0,0,0,0
  327.  
  328. Player2Shot:
  329.  
  330.  tst.w PLR2_TimeToShoot
  331.  beq.s okcanfire2
  332.  
  333.  move.w TempFrames,d0
  334.  sub.w d0,PLR2_TimeToShoot
  335.  bge PLR2_nofire
  336.  move.w #0,PLR2_TimeToShoot
  337.  bra PLR2_nofire
  338.  
  339. okcanfire2:
  340.  
  341.  
  342.  lea PLR2_GunData,a6
  343.  moveq #0,d0
  344.  move.b p2_gunselected,d0
  345.  move.b d0,tempgun
  346.  
  347.  move.l #GunAnims,a0
  348.  move.b 7(a0,d0.w*8),MaxFrame
  349.  
  350.  lsl.w #2,d0
  351.  lea (a6,d0.w*8),a6
  352.  move.w 14(a6),BulletSpd
  353.  
  354.  tst.w 12(a6)
  355.  beq.s .itsaclick
  356.  
  357.  tst.b p2_fire
  358.  beq PLR2_nofire
  359.  bra .itsahold
  360.  
  361. .itsaclick:
  362.  tst.b p2_clicked
  363.  beq PLR2_nofire
  364.  
  365. .itsahold:
  366.  
  367.  move.w PLR2_angpos,d0
  368.  move.l #SineTable,a0
  369.  lea (a0,d0.w),a0
  370.  move.w (a0),tempxdir 
  371.  move.w 2048(a0),tempzdir
  372.  move.w PLR2_xoff,tempxoff
  373.  move.w PLR2_zoff,tempzoff
  374.  move.l PLR2_yoff,tempyoff
  375.  add.l #20*128,tempyoff
  376.  move.b PLR2_StoodInTop,tempStoodInTop
  377.  move.l PLR2_Roompt,tempRoompt
  378.  move.l #%1111111111010111100001,d7
  379.  move.w #-1,d0
  380.  move.l #0,targetydiff
  381.  move.l #$7fff,d1
  382.  
  383.  move.l ZoneAdds,a3
  384.  
  385.  move.l #PLR2_ObsInLine,a1
  386.  move.l ObjectData,a0
  387.  move.l #PLR2_ObjDists,a2
  388. findclosestinline2
  389.  tst.w (a0)
  390.  blt outofline2
  391.  tst.b (a1)+
  392.  beq.s notlinedup2
  393.  btst #1,17(a0)
  394.  beq.s notlinedup2
  395.  tst.w 12(a0)
  396.  blt.s notlinedup2
  397.  move.b 16(a0),d6
  398.  btst d6,d7
  399.  beq.s notlinedup2
  400.  tst.b numlives(a0)
  401.  beq.s notlinedup2
  402.  move.w (a0),d5
  403.  move.w (a2,d5.w*2),d6
  404.  move.w 4(a0),d2
  405.  ext.l d2
  406.  asl.l #7,d2
  407.  sub.l PLR2_yoff,d2
  408.  move.l d2,d3
  409.  bge.s .oknotneg
  410.  neg.l d2
  411. .oknotneg:
  412.  divs #44,d2
  413.  cmp.w d6,d2
  414.  bgt.s notlinedup2
  415.  
  416.  cmp.w d6,d1
  417.  blt.s notlinedup2
  418.  move.w d6,d1
  419.  move.l a0,a5
  420.  
  421. ; We have a closer enemy lined up.
  422.  move.l d3,targetydiff 
  423.  move.w d5,d0
  424.  
  425. notlinedup2:
  426.  add.w #64,a0
  427.  bra findclosestinline2
  428.  
  429. outofline2:
  430.  
  431.  
  432.  move.w d1,targdist
  433.  
  434.  move.l targetydiff,d5
  435.  sub.l PLR2_height,d5
  436.  add.l #18*256,d5
  437.  move.w d1,closedist
  438.  
  439.  move.w BulletSpd,d2
  440.  asr.w d2,d1
  441.  tst.w d1
  442.  bgt.s okdistthing2
  443.  moveq #1,d1
  444. okdistthing2
  445.  divs d1,d5
  446.  move.w d5,bulyspd
  447.  
  448.  move.w (a6),d2
  449.  moveq #0,d1
  450.  move.b 2(a6),d1
  451.  cmp.w d1,d2
  452.  bge.s .okcanshoot
  453.  
  454.  move.l PLR2_Obj,a2
  455.  move.w (a2),d0
  456.  move.l #ObjRotated,a2
  457.  move.l (a2,d0.w*8),Noisex
  458.  move.w #300,Noisevol
  459.  move.b #12,Samplenum+1
  460.  clr.b notifplaying
  461.  move.b #$fb,IDNUM
  462.  jsr MakeSomeNoise
  463.  
  464.  rts
  465.  
  466. .okcanshoot:
  467.  
  468.  move.w 8(a6),PLR2_TimeToShoot
  469.  
  470.  move.b MaxFrame,PLR2_GunFrame
  471.  sub.w d1,d2
  472.  move.w d2,(a6)
  473.  
  474.  move.l PLR2_Obj,a2
  475.  move.w (a2),d2
  476.  move.l #ObjRotated,a2
  477.  move.l (a2,d2.w*8),Noisex
  478.  move.w #300,Noisevol
  479.  move.b 3(a6),Samplenum+1
  480.  move.b #2,chanpick
  481.  clr.b notifplaying
  482.  movem.l d0/a0/d5/d6/d7/a6/a5,-(a7)
  483.  move.b #$fb,IDNUM
  484.  jsr MakeSomeNoise
  485.  movem.l (a7)+,d0/a0/d5/d6/d7/a6/a5
  486.  
  487.  tst.w d0
  488.  blt nothingtoshoot2
  489.  
  490.  tst.b 5(a6)
  491.  beq PLR2FIREBULLET
  492.  
  493. ; instant effect: check for hitting:
  494.  
  495.  move.w 22(a6),d7
  496.  
  497. FIREBULLETS2:
  498.  
  499.  movem.l a0/a1/d7/d0/a5,-(a7)
  500.  jsr GetRand
  501.  
  502.  move.l ObjectPoints,a1
  503.  move.w (a5),d1
  504.  lea (a1,d1.w*8),a1
  505.  
  506.  and.w #$7fff,d0
  507.  move.w (a1),d1
  508.  sub.w PLR2_xoff,d1
  509.  muls d1,d1
  510.  move.w 4(a1),d2
  511.  sub.w PLR2_zoff,d2
  512.  muls d2,d2
  513.  add.l d2,d1
  514.  asr.l #6,d1
  515.  ext.l d0
  516.  asl.l #1,d0
  517.  cmp.l d1,d0
  518.  bgt.s .hitplr
  519.  
  520.  movem.l (a7)+,a0/a1/d7/d0/a5
  521.  move.l d0,-(a7)
  522.  bsr PLR2MISSINSTANT
  523.  move.l (a7)+,d0
  524.  
  525.  bra.s .missplr
  526. .hitplr: 
  527.  
  528.  movem.l (a7)+,a0/a1/d7/d0/a5
  529.  move.l d0,-(a7)
  530.  bsr PLR2HITINSTANT
  531.  move.l (a7)+,d0
  532.  
  533. .missplr:
  534.  
  535.  subq #1,d7
  536.  bgt.s FIREBULLETS2
  537.  
  538.  rts
  539.  
  540. nothingtoshoot2:
  541.  move.w #0,bulyspd
  542.  tst.b 5(a6)
  543.  beq PLR2FIREBULLET
  544.  
  545.  move.w #0,bulyspd
  546.  
  547.  move.w PLR2_xoff,oldx
  548.  move.w PLR2_zoff,oldz
  549.  move.w PLR2_sinval,d0
  550.  asr.w #7,d0
  551.  add.w oldx,d0
  552.  move.w d0,newx
  553.  move.w PLR2_cosval,d0
  554.  asr.w #7,d0
  555.  add.w oldz,d0
  556.  move.w d0,newz
  557.  move.l PLR2_yoff,d0
  558.  add.l #20*128,d0
  559.  move.l d0,oldy
  560.  
  561.  move.l d0,d1
  562.  jsr GetRand
  563.  and.w #$fff,d0
  564.  sub.w #$800,d0
  565.  ext.l d0
  566.  add.l d0,d1
  567.  
  568.  move.l d1,newy
  569.  
  570.  st exitfirst
  571.  clr.b wallbounce
  572.  move.w #0,extlen
  573.  move.b #$ff,awayfromwall
  574.  move.w #%0000010000000000,wallflags
  575.  move.l #0,StepUpVal
  576.  move.l #$1000000,StepDownVal
  577.  move.l #0,thingheight
  578.  move.l PLR2_Roompt,objroom
  579.  movem.l d0-d7/a0-a6,-(a7)
  580.  
  581. .again:
  582.  jsr MoveObject
  583.  tst.b hitwall
  584.  bne.s .nofurther
  585.  move.w newx,d0
  586.  sub.w oldx,d0
  587.  add.w d0,oldx
  588.  add.w d0,newx
  589.  move.w newz,d0
  590.  sub.w oldz,d0
  591.  add.w d0,oldz
  592.  add.w d0,newz
  593.  move.l newy,d0
  594.  sub.l oldy,d0
  595.  add.l d0,oldy
  596.  add.l d0,newy
  597.  bra .again
  598.  
  599. .nofurther:
  600.  
  601.  movem.l (a7)+,d0-d7/a0-a6
  602.  
  603.  move.l PlayerShotData,a0
  604.  move.w #19,d1
  605. .findonefree2
  606.  move.w 12(a0),d2
  607.  blt.s .foundonefree2
  608.  adda.w #64,a0
  609.  dbra d1,.findonefree2
  610.  
  611.  rts
  612.  
  613. .foundonefree2:
  614.  
  615.  move.l ObjectPoints,a1
  616.  move.w (a0),d2
  617.  move.w newx,(a1,d2.w*8)
  618.  move.w newz,4(a1,d2.w*8)
  619.  move.b #1,shotstatus(a0)
  620.  move.w #0,shotgrav(a0)
  621.  move.b p2_gunselected,shotsize(a0)
  622.  move.b #0,shotanim(a0)
  623.  
  624.  move.l objroom,a1
  625.  move.w (a1),12(a0)
  626.  st worry(a0)
  627.  move.l wallhitheight,d0
  628.  move.l d0,accypos(a0)
  629.  asr.l #7,d0
  630.  move.w d0,4(a0)
  631.  
  632.  rts
  633.  
  634. PLR2_nofire:
  635.  
  636.  rts
  637.  
  638.  
  639. BulletSpd: dc.w 0
  640.  
  641. *******************************************************
  642.  
  643. tempyoff: dc.l 0
  644. tempStoodInTop: dc.w 0
  645. tempangpos: dc.w 0
  646. tempxdir: dc.w 0
  647. tempzdir: dc.w 0
  648. tempgun: dc.w 0
  649. tstfire: dc.w 0
  650. PLR1FIREBULLET:
  651.  
  652.  move.w #256,d6
  653.  move.w #256,d5
  654.  
  655.  move.b MaxFrame,PLR1_GunFrame
  656.  move.l PLR1_Obj,a2
  657.  bra firefive
  658.  
  659. PLR2FIREBULLET:
  660.  
  661.  move.b MaxFrame,PLR2_GunFrame
  662.  move.l PLR2_Obj,a2
  663.  
  664. firefive:
  665.  
  666.  move.l PlayerShotData,a0
  667.  move.w #19,d1
  668. .findonefree
  669.  move.w 12(a0),d0
  670.  blt.s .foundonefree
  671.  adda.w #64,a0
  672.  dbra d1,.findonefree
  673.  
  674.  rts
  675.  
  676. .foundonefree
  677.  move.w 16(a6),shotgrav(a0)
  678.  move.w 18(a6),shotflags(a0)
  679.  
  680.  move.w bulyspd,d0
  681.  
  682.  cmp.w #20*128,d0
  683.  blt.s .okdownspd
  684.  move.w #20*128,d0
  685. .okdownspd:
  686.  
  687.  cmp.w #-20*128,d0
  688.  bgt.s .okupspd
  689.  move.w #-20*128,d0
  690. .okupspd:
  691.  
  692.  add.w 20(a6),d0
  693.  
  694.  move.w d0,bulyspd
  695.  
  696.  move.l #ObjRotated,a2
  697.  move.b tempgun,shotsize(a0)
  698.  move.b 6(a6),shotpower(a0)
  699.  
  700.  move.l ObjectPoints,a1
  701.  move.w (a0),d1
  702.  lea (a1,d1.w*8),a1
  703.  move.w tempxoff,(a1)
  704.  move.w tempzoff,4(a1)
  705.  move.w tempxdir,d0
  706.  ext.l d0
  707.  
  708.  move.w BulletSpd,d1
  709.  asl.l d1,d0
  710.  move.l d0,shotxvel(a0)
  711.  move.w tempzdir,d0
  712.  ext.l d0
  713.  asl.l d1,d0
  714.  move.l d0,shotzvel(a0)
  715.  move.w bulyspd,shotyvel(a0)
  716.  move.b tempStoodInTop,ObjInTop(a0)
  717.  move.w #0,shotlife(a0)
  718.  move.l d7,EnemyFlags(a0)
  719.  move.l tempRoompt,a2
  720.  move.w (a2),12(a0)
  721.  move.l tempyoff,d0
  722.  add.l #20*128,d0
  723.  move.l d0,accypos(a0)
  724.  st worry(a0)
  725.  asr.l #7,d0
  726.  move.w d0,4(a0)
  727.  
  728.  rts
  729.  
  730. PLR1HITINSTANT:
  731.  
  732. ; Just blow it up.
  733.  
  734.  move.l PlayerShotData,a0
  735.  move.w #19,d1
  736. .findonefree
  737.  move.w 12(a0),d2
  738.  blt.s .foundonefree
  739.  adda.w #64,a0
  740.  dbra d1,.findonefree
  741.  
  742.  rts
  743.  
  744. .foundonefree:
  745.  
  746.  move.l ObjectPoints,a1
  747.  move.w (a0),d2
  748.  move.l (a1,d0.w*8),(a1,d2.w*8)
  749.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  750.  move.b #1,shotstatus(a0)
  751.  move.w #0,shotgrav(a0)
  752.  move.b p1_gunselected,shotsize(a0)
  753.  move.b #0,shotanim(a0)
  754.  
  755.  move.w 4(a5),d1
  756.  ext.l d1
  757.  asl.l #7,d1
  758.  move.l d1,accypos(a0)
  759.  move.w 12(a5),12(a0)
  760.  st worry(a0)
  761.  move.w 4(a5),4(a0)
  762.  
  763.  move.b 6(a6),d0
  764.  add.b d0,damagetaken(a5)
  765.  
  766.  move.w tempxdir,d1
  767.  ext.l d1
  768.  asl.l #3,d1
  769.  swap d1
  770.  move.w d1,ImpactX(a5)
  771.  move.w tempzdir,d1
  772.  ext.l d1
  773.  asl.l #3,d1
  774.  swap d1
  775.  move.w d1,ImpactZ(a5)
  776.  
  777.  rts
  778.  
  779. PLR1MISSINSTANT: 
  780.  
  781.  move.w PLR1_xoff,oldx
  782.  move.w PLR1_zoff,oldz
  783.  move.l PLR1_yoff,d1
  784.  add.l #20*128,d1
  785.  move.l d1,oldy
  786.  
  787.  move.w (a5),d0
  788.  move.l ObjectPoints,a1
  789.  move.w (a1,d0.w*8),d2
  790.  sub.w oldx,d2
  791.  asr.w #1,d2
  792.  add.w oldx,d2
  793.  move.w d2,newx
  794.  move.w 4(a1,d0.w*8),d2
  795.  sub.w oldz,d2
  796.  asr.w #1,d2
  797.  add.w oldz,d2
  798.  move.w d2,newz
  799.  
  800.  move.w 4(a0),d2
  801.  ext.l d2
  802.  asl.l #7,d2
  803.  move.l d2,newy
  804.  
  805.  st exitfirst
  806.  clr.b wallbounce
  807.  move.w #0,extlen
  808.  move.b #$ff,awayfromwall
  809.  move.w #%0000010000000000,wallflags
  810.  move.l #0,StepUpVal
  811.  move.l #$1000000,StepDownVal
  812.  move.l #0,thingheight
  813.  move.l PLR1_Roompt,objroom
  814.  movem.l d0-d7/a0-a6,-(a7)
  815.  
  816. .again:
  817.  jsr MoveObject
  818.  tst.b hitwall
  819.  bne.s .nofurther
  820.  move.w newx,d1
  821.  sub.w oldx,d1
  822.  add.w d1,oldx
  823.  add.w d1,newx
  824.  move.w newz,d1
  825.  sub.w oldz,d1
  826.  add.w d1,oldz
  827.  add.w d1,newz
  828.  move.l newy,d1
  829.  sub.l oldy,d1
  830.  add.l d1,oldy
  831.  add.l d1,newy
  832.  bra .again
  833.  
  834. .nofurther:
  835.  
  836.  movem.l (a7)+,d0-d7/a0-a6
  837.  
  838.  move.l PlayerShotData,a0
  839.  move.w #19,d1
  840. .findonefree2
  841.  move.w 12(a0),d2
  842.  blt.s .foundonefree2
  843.  adda.w #64,a0
  844.  dbra d1,.findonefree2
  845.  
  846.  rts
  847.  
  848. .foundonefree2:
  849.  
  850.  move.l ObjectPoints,a1
  851.  move.w (a0),d2
  852.  move.w newx,(a1,d2.w*8)
  853.  move.w newz,4(a1,d2.w*8)
  854.  move.b #1,shotstatus(a0)
  855.  move.w #0,shotgrav(a0)
  856.  move.b p1_gunselected,shotsize(a0)
  857.  move.b #0,shotanim(a0)
  858.  
  859.  move.l objroom,a1
  860.  move.w (a1),12(a0)
  861.  st worry(a0)
  862.  move.l newy,d1
  863.  move.l d1,accypos(a0)
  864.  asr.l #7,d1
  865.  move.w d1,4(a0)
  866.  
  867.  rts
  868.  
  869.  
  870. PLR2HITINSTANT:
  871.  
  872. ; Just blow it up.
  873.  
  874.  move.l PlayerShotData,a0
  875.  move.w #19,d1
  876. .findonefree
  877.  move.w 12(a0),d2
  878.  blt.s .foundonefree
  879.  adda.w #64,a0
  880.  dbra d1,.findonefree
  881.  
  882.  rts
  883.  
  884. .foundonefree:
  885.  
  886.  move.l ObjectPoints,a1
  887.  move.w (a0),d2
  888.  move.l (a1,d0.w*8),(a1,d2.w*8)
  889.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  890.  move.b #1,shotstatus(a0)
  891.  move.w #0,shotgrav(a0)
  892.  move.b p2_gunselected,shotsize(a0)
  893.  move.b #0,shotanim(a0)
  894.  
  895.  move.w 4(a5),d1
  896.  ext.l d1
  897.  asl.l #7,d1
  898.  move.l d1,accypos(a0)
  899.  move.w 12(a5),12(a0)
  900.  st worry(a0)
  901.  move.w 4(a5),4(a0)
  902.  
  903.  move.b 6(a6),d0
  904.  add.b d0,damagetaken(a5)
  905.  
  906.  move.w tempxdir,d1
  907.  ext.l d1
  908.  asl.l #3,d1
  909.  swap d1
  910.  move.w d1,ImpactX(a5)
  911.  move.w tempzdir,d1
  912.  ext.l d1
  913.  asl.l #3,d1
  914.  swap d1
  915.  move.w d1,ImpactZ(a5)
  916.  
  917.  rts
  918.  
  919. PLR2MISSINSTANT: 
  920.  
  921.  move.w PLR2_xoff,oldx
  922.  move.w PLR2_zoff,oldz
  923.  move.l PLR2_yoff,d1
  924.  add.l #20*128,d1
  925.  move.l d1,oldy
  926.  
  927.  move.w (a5),d0
  928.  move.l ObjectPoints,a1
  929.  move.w (a1,d0.w*8),d2
  930.  sub.w oldx,d2
  931.  asr.w #1,d2
  932.  add.w oldx,d2
  933.  move.w d2,newx
  934.  move.w 4(a1,d0.w*8),d2
  935.  sub.w oldz,d2
  936.  asr.w #1,d2
  937.  add.w oldz,d2
  938.  move.w d2,newz
  939.  move.w 4(a0),d2
  940.  ext.l d2
  941.  asl.l #7,d2
  942.  move.l d2,newy
  943.  
  944.  st exitfirst
  945.  clr.b wallbounce
  946.  move.w #0,extlen
  947.  move.b #$ff,awayfromwall
  948.  move.w #%0000010000000000,wallflags
  949.  move.l #0,StepUpVal
  950.  move.l #$1000000,StepDownVal
  951.  move.l #0,thingheight
  952.  move.l PLR2_Roompt,objroom
  953.  movem.l d0-d7/a0-a6,-(a7)
  954.  
  955. .again:
  956.  jsr MoveObject
  957.  tst.b hitwall
  958.  bne.s .nofurther
  959.  move.w newx,d1
  960.  sub.w oldx,d1
  961.  add.w d1,oldx
  962.  add.w d1,newx
  963.  move.w newz,d1
  964.  sub.w oldz,d1
  965.  add.w d1,oldz
  966.  add.w d1,newz
  967.  move.l newy,d1
  968.  sub.l oldy,d1
  969.  add.l d1,oldy
  970.  add.l d1,newy
  971.  bra .again
  972.  
  973. .nofurther:
  974.  
  975.  movem.l (a7)+,d0-d7/a0-a6
  976.  
  977.  move.l PlayerShotData,a0
  978.  move.w #19,d1
  979. .findonefree2
  980.  move.w 12(a0),d2
  981.  blt.s .foundonefree2
  982.  adda.w #64,a0
  983.  dbra d1,.findonefree2
  984.  
  985.  rts
  986.  
  987. .foundonefree2:
  988.  
  989.  move.l ObjectPoints,a1
  990.  move.w (a0),d2
  991.  move.w newx,(a1,d2.w*8)
  992.  move.w newz,4(a1,d2.w*8)
  993.  move.b #1,shotstatus(a0)
  994.  move.w #0,shotgrav(a0)
  995.  move.b p2_gunselected,shotsize(a0)
  996.  move.b #0,shotanim(a0)
  997.  
  998.  move.l objroom,a1
  999.  move.w (a1),12(a0)
  1000.  st worry(a0)
  1001.  move.l newy,d1
  1002.  move.l d1,accypos(a0)
  1003.  asr.l #7,d1
  1004.  move.w d1,4(a0)
  1005.  
  1006.  rts
  1007.